package edzest.basic;

public class J16_OOP_Q72 {
	public static void main(String[] args){
		// 상속, 인터페이스, 기본클래스를 이용해서
		// 사각형 둘레 및 면적 계산하는 프로그램 작성
		J16Retangle r = new J16Retangle(12.0, 24.5);
		System.out.println( r.toString() );
		System.out.println( r.getArea() );
		System.out.println( r.getCircum() );
	} // main
} // class

// 클래스
class J16Shape implements J16ShapeService {
	private double width;
	private double height;
	
	public J16Shape() {	}

	public J16Shape(double width, double height) {
		this.width = width;
		this.height = height;
	}

	public double getWidth() {
		return width;
	}

	public void setWidth(double width) {
		this.width = width;
	}

	public double getHeight() {
		return height;
	}

	public void setHeight(double height) {
		this.height = height;
	}

	@Override
	public String toString() {
		return "J16Shape [width=" + width + ", height=" + height + "]";
	}

	
	@Override  
	// 이 기본클래스에서 재정의 완료
	// 이 기본클래스를 상속받는 클래스는 재정의의 짐에서 벗어남
	// 재정의 하고 싶은 메서드만 재정의하면 됨
	public double getArea() {
		// 이 기본 클래스를 상속받는 도형에 따라서 계산식이 다르므로 비워둠
		return width;
		// width는 private이므로 이 클래스 내에서만 사용 가능
		// 상속받은 클래스에서는 보이지 않음, getWidth로 가져와야 됨
	}


	@Override
	public double getCircum() {
		// 이 기본 클래스를 상속받는 도형에 따라서 계산식이 다르므로 비워둠
		return 0;
	}
	
}

// 인터페이스
interface J16ShapeService {
	double getArea( );
	double getCircum( );
}

// 사각형 클래스
class J16Retangle extends J16Shape {
	
	public J16Retangle( double w, double h) {
		super(w, h);
	}
	
	@Override
	public double getArea() {
		return getWidth() * getHeight();
	}
	
	@Override
	public double getCircum() {
		return getWidth()*2 + getHeight()*2;
	}
}

class J16Triangle extends J16Shape {
	
	public J16Triangle( double w, double h) {
		super(w, h);
	}
	
	@Override
	public double getArea() {
		return (getWidth() * getHeight()) / 2;
	}
	
	@Override
	public double getCircum() {
		return getWidth()*2 + getHeight()*2;
	}
}
// 과제
// J16Circle : 원둘레, 원너비
// J16Triangle : 둘레, 너비











